{{ template "header_start" .}}
{{ template "bootstrap" .}}
{{ template "global" .}}
<link rel="stylesheet" type="text/css" href="/static/css/index/index.css">
<script type="text/javascript" src="/static/js/index/product.js"></script>

{{ template "header_end" .}}


{{ template "nav" . }}

<section class="container">
	<h2>This is for Introduce Product structure of Besovideo Common Device</h2>

	<div class="list-group">
	    <a class="list-group-item" href="#plat">1. 产品平台结构</a>
	    <a class="list-group-item" href="#program">2. 产品内部程序结构</a>
	    <a class="list-group-item" href="#process">3. 管道通信结构</a>
	    <a class="list-group-item" href="#protocol">4. 管道通信具体协议</a>
	</div>
	<!-- <hr class="red-line" /> -->
	<div class="panel">
	<div class="panel-heading">
	    <div class="panel-title"><h3><a name="palt">1. 产品平台结构</a></h3></div>
	</div>
	<div class="row">
	<p class="col-lg-8">整个平台可以被理解成多个CS架构,一个服务器server可以有多个设备发送数据过去，同时可能有多个客户端在看client上面的数据，形成多个client,多个设备对应一个server。>但由于有很多server，也就是也有多个这样的结构存在。这里所谓的经常听到的pu指的就是设备，cu指的就是client。</p><img class="col-lg-3" src="images/1.png"/>

	</div>
	</div>

    <div class="panel">
    <div class="panel-heading">
	    <div class="panel-title"><h3><a name="program">2. 产品内部程序结构</a></h3></div>
	</div>
	<div class="row">
	<p class="col-lg-5">整个设备部分就相当于一个linux系统，启动程序包括ubl, uboot，然后就是内核，接着就到了文件系统，之后就是指定一个个需要启动的程序依次启动。每个程序负责某一块，各
个程序相互通信协作，使用整个平台正常运行。</p><img class="col-lg-3" src="images/2.png"><img class="col-lg-3" src="images/3.png">
<ul>
	<li>bv_dvr_ctrl:中心管道命令，负责命令转发</li>
	<li>misc_ctrl:中心控制程序，负责各进程交互</li>
	<li>elss:视频编码，处理音视频数据</li>
    <li>dialdaemon:拨号程序，负责3g,wifi,以太网等拨号过程</li>
    <li>ptz:负责外设处理，如串口，gps，云台等操作</li>
    <li>stmp:负责时间校时</li>
    <li>livecams:负责网络交互和数据传输</li>
    <li>sacdil:负责局域网工具配置的设备端交互</li>
    <li>nandtool:负责配置文件保存和升级</li>
	</ul>
    </div>
    </div>

    <div class="panel">
    <div class="panel-heading">
    	<div class="panel-title"><h3><a name="process">3. 管道通信结构</a></h3></div>
    </div>
	<div class="row">
	<p class="col-lg-7">在进程通信这一块，公司有两种方式，一个是共享内存，比如视频通信，GPS数据之类的都在用，另一种是管道通信，每个进程启动后都启动一个属于自己的管道，并告知中心管道
程序（这里是指bv_dvr_ctrl），然后进程要想将信息交给另一个进程，则会发送命令给中心管道程序，由它负责转发出去。所谓管道就是linux下用mkfifo可以创建的类似于管道>的设备，进程会不断的读取管道数据并进行相应处理。</p><img class="col-lg-4" src="images/5.png">
    </div>
    </div>

    <div class="panel">
    <div class="panel-heading">
	    <div class="panel-title"><h3><a name="protocol">4. 管道通信具体协议</a></h3></div>
	</div>
	<div class="row">
	<p class="col-lg-7">管道通信的协议是公司自己定义，有具体的格式。原现的管道是只处理字符串类型的数据，但后来，考虑到数据过程序，解析过于复杂，采用的protobuf结构，这个工具有相应的c++接口，可直接使用，便于添加和修改功能。</p><img class="col-lg-4" src="images/4.png"
>	</div>
	</div>

    <div class="panel">
	<ol>
	    <li>gui界面开发</li>
	    <li>内核驱动开发</li>
	    <li>有关视频基础知识</li>
	</ol>
	<div class="panel-footer"><h4>后期准备工作</h4></div>
	</div>
</section>

<nav class="extern-brower">
<ul>
<li><a href="/jmdkina/help.html" >本站声明</a><li>
<li><a href="/index/interface.html">misc_ctrl接口文档</a><li>
</ul>
<br class="jk-clear" />
</nav>

<div id="bigimages" class="ul-horizontal modal fade">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
	<button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
	<h3 class="modal-title"></h3>
</div>
<div class="modal-body">
    <img src="" />
</div>

</div>
</div>
</div>

{{ template "footer" .}}